package de.luisoft.ui.view;

import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;

import com.vaadin.data.Validator;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.data.util.BeanItem;
import com.vaadin.ui.Button;
import com.vaadin.ui.Form;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;

import de.luisoft.dto.WahlDTO;
import de.luisoft.ui.control.SendClickListener;

public class FormPanel extends Form {

	private static final long serialVersionUID = 1L;

	private static final Logger log = Logger.getLogger(FormPanel.class.getName());

	public FormPanel(final TwinPanel t) {

		final WahlDTO w = new WahlDTO();
		BeanItem<WahlDTO> item = new BeanItem<WahlDTO>(w);

		// Bind the bean item as the data source for the form.
		setItemDataSource(item);
		setWriteThrough(false);
		setInvalidCommitted(false);
		setCaption("Projektauswahl");
		setDescription("Wenn Du deine Lieblingsprojekte ausgewählt hast, " +
				"kannst Du die Auswahl absenden. Dazu gib bitte zur"
				+ " Registrierung Deinen Namen, die Klasse und die email-Adresse ein.");

		setVisibleItemProperties(Arrays.asList(new String[] { "vorname",
				"name", "klasse", "email" }));

		setEnabled(false);
		setReadOnly(true);

		getField("name").setRequired(true);
		getField("name").setRequiredError("Bitte den Namen angeben.");
		getField("vorname").setRequired(true);
		getField("vorname").setRequiredError("Bitte den Vornamen angeben.");
		getField("email").setRequired(true);
		getField("email").setRequiredError("Bitte die EMail Adresse angeben.");
		getField("klasse").setRequired(true);
		getField("klasse").setRequiredError("Bitte die Klasse angeben.");

		getField("vorname").addValidator(new Validator() {

			private static final long serialVersionUID = 1L;

			public void validate(Object value) throws InvalidValueException {
				List<String> c = t.getAllSelected();
				log.info("validate " + c.size());
				if (!isValid(value)) {
					throw new InvalidValueException("Bitte mindestens 5 Projekte eingeben.");
				}
			}

			public boolean isValid(Object value) {
				List<String> c = t.getAllSelected();
				log.info("isValid " + c.size());
				if (c.size() < 5) {
					return false;
				}
				return true;
			}
			
		});
		Button b = new Button("Absenden", new SendClickListener(this, w, t)); 
		b.setEnabled(false);

		VerticalLayout vl = new VerticalLayout();
		Label l = new Label(
				"Nach dem Absenden, bekommst du eine email." +
				" Bitte bestätige die Angaben durch Klicken auf " +
				"den in der Mail enthaltenen Link. Falls Du in den nächsten Minuten " +
				"keine email erhalten solltest," +
				" prüfe bitte auch den Spam-Filter. Das Vorbereitungsteam"
				+ " bemüht sich, deine Wünsche zu erfüllen, ob es klappt hängt freilich vom"
				+ " Wahlverhalten aller ab.");
		l.setContentMode(Label.CONTENT_TEXT);
		l.setWidth("420px");
		vl.addComponent(l);
		vl.addComponent(b);
		getFooter().addComponent(vl);
	}

}
